CloudFormationでVPC構成を記述して展開してみた

CloudFormationでVPC構成を記述して展開してみた

Clock Icon2024.09.04

はじめに

かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。

このブログではYAMLテンプレートを記述し、CloudFormationにアップロードすることでリソースを作成しました。

別の方法でのリソース作成については以下のブログに記載しました。

https://devio2024-front-preview.developers.io/articles/aws-application-composer-yaml/

https://devio2024-front-preview.developers.io/articles/aws-cdk-vpc-katsumata/

構成図は以下の通りです。
CFn.drawio

YAMLテンプレート作成

CloudFormationにアップロードする、YAMLテンプレートファイルをローカルで作成します。以下が今回作成したテンプレートです。

yaml
AWSTemplateFormatVersion: '2010-09-09'

Parameters:
  MyIP:
    Type: String
    Description: The IP address range that is allowed to access the instance
    Default: '自分のIPアドレス'

Resources:
  katsumataVPCCFn:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: true
      EnableDnsHostnames: true

  katsumataEC2CFn:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-00c79d83cf718a893 #自身のリージョンに存在するAMI IDを記入
      NetworkInterfaces:
        - AssociatePublicIpAddress: true
          DeviceIndex: '0'
          SubnetId: !Ref katsumataSubnetCFn
          GroupSet:
            - !Ref katsumataSgCFn

  katsumataSgCFn:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow HTTP
      VpcId: !Ref katsumataVPCCFn
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: !Ref MyIP
      - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref MyIP

  katsumataSubnetCFn:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref katsumataVPCCFn
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: true

  katsumataIGWCFn:
    Type: AWS::EC2::InternetGateway
    Properties: {}

  katsumataVPCGatewayAttachmentCFn:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref katsumataVPCCFn
      InternetGatewayId: !Ref katsumataIGWCFn

各パラメータ項目について説明を記述していきます。

項目 説明
AWSTemplateFormatVersion テンプレートのバージョンを指定。
MyIP 特定のIPアドレス範囲からのアクセスを許可するためのパラメータ。デフォルト値は「自分のIPアドレス」。
VPC
Type: AWS::EC2::VPC VPCリソースの種類を指定。
CidrBlock: 10.0.0.0/16 VPCのCIDRブロックを指定。
EnableDnsSupport: true DNSサポートを有効。
EnableDnsHostnames: true DNSホスト名を有効。
EC2
Type: AWS::EC2::Instance EC2インスタンスリソースの種類を指定。
InstanceType: t2.micro インスタンスタイプを指定。
ImageId: ami-00c79d83cf718a893 使用するAMIのIDを指定。
NetworkInterfaces ネットワークインターフェースの設定を定義。
AssociatePublicIpAddress: true パブリックIPアドレスを割り当て。
DeviceIndex: '0' ネットワークインターフェースのデバイスインデックスを指定。
SubnetId: !Ref katsumataSubnetCFn サブネットのIDを参照。
GroupSet: !Ref katsumataSgCFn セキュリティグループのIDを参照。
セキュリティグループ
Type: AWS::EC2::SecurityGroup セキュリティグループリソースの種類を指定。
GroupDescription: Allow HTTP セキュリティグループの説明を指定。
VpcId: !Ref katsumataVPCCFn VPCのIDを参照。
SecurityGroupIngress インバウンドルールを定義。
IpProtocol: tcp 許可するプロトコルを指定。
FromPort: 80 許可するポート(HTTP)の開始番号を指定。
ToPort: 80 許可するポート(HTTP)の終了番号を指定。
CidrIp: !Ref MyIP 許可するIPアドレス範囲を参照(パラメータ MyIP から取得)。
IpProtocol: tcp 許可するプロトコルを指定。
FromPort: 22 許可するポート(SSH)の開始番号を指定。
ToPort: 22 許可するポート(SSH)の終了番号を指定。
CidrIp: !Ref MyIP 許可するIPアドレス範囲を参照(パラメータ MyIP から取得)。
サブネット
Type: AWS::EC2::Subnet サブネットリソースの種類を指定。
CidrBlock: 10.0.1.0/24 サブネットのCIDRブロックを指定。
MapPublicIpOnLaunch: true インスタンス起動時にパブリックIPを割り当てるかどうかを指定。
インターネットゲートウェイ
Type: AWS::EC2::InternetGateway インターネットゲートウェイリソースの種類を指定。
Properties: {} 空のプロパティブロック(特に設定が必要ないため)。
VPCにインターネットゲートウェイをアタッチ
Type: AWS::EC2::VPCGatewayAttachment VPCゲートウェイアタッチメントリソースの種類を指定。
VpcId: !Ref katsumataVPCCFn VPCのIDを参照。
InternetGatewayId: !Ref katsumataIGWCFn インターネットゲートウェイのIDを参照。

スタック作成

1.CloudFormationコンソールに移動し、「スタック」→「スタックの作成(新しいリソースを作成)」を押下する。

スタック作成開始

2.「テンプレートの指定」→「テンプレートファイルのアップロード」を選択し、事前に作成したYAMLファイルをアップロードします。
スタック作成1

3.スタックの名前を入力します
スタック作成2

4.「スタックのオプションを設定」では必要に応じてタグやその他のオプションを設定します。今回はデフォルトのままで実行しました。
スタックオプションの設定

5.設定内容を確認し、スタックを作成します。
スタック作成完了

作成リソースの確認

マネジメントコンソール上でYAMLテンプレートで記述したサービスに移動し、作成できていることを確認します。(画像は作成したVPC)
リソース確認

スタック削除

コストを抑えるために作成したスタックを削除します。

1.CloudFormationの「スタック」で作成したスタックを選択します。

2.「削除」を選択し、スタックの削除を行います。

削除ボタン画面

削除確定

おわりに

今回、CloudFormationを利用して、マネジメントコンソールからシンプルな方法でリソース作成を行いました。すでにテンプレートがある状態のリソース作成としては、視覚的にも実施しやすい方法であると感じました。

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.